package system

import (
	"encoding/json"
	"time"

	"gitee.com/xgotool/backend-framework-template/service/progress"
	"gitee.com/xiaoyutab/xgotool/individual/xginplus"
	"gitee.com/xiaoyutab/xgotool/xstring"
)

// 前端获取当前处理进度
//
//	GET	system/progress
func Progress(c *xginplus.Context) *xginplus.Response {
	type temp_struct struct {
		Key     string      `json:"key" form:"key" xml:"key"`             // 进度下标
		Current json.Number `json:"current" form:"current" xml:"current"` // 当前进度 每次获取到以后将获取到的新值传入此进度，直到完成
	}
	temp := temp_struct{}
	if err := c.Bind(&temp); err != nil {
		return c.Error(err)
	}
	type temp_struct_used struct {
		Key     string // 进度下标
		Current int    // 当前进度 每次获取到以后将获取到的新值传入此进度，直到完成
	}
	param := temp_struct_used{}
	// 参数赋值
	param.Key = temp.Key
	param.Current = xstring.JInt(temp.Current)
	// ApiPost软件所需要的参数描述格式:
	// [{"is_checked":1,"not_null":1,"key":"key","type":"Text","field_type":"String","value":"","description":"进度下标"},{"is_checked":1,"not_null":-1,"key":"current","type":"Text","field_type":"Integer","value":"","description":"当前进度 每次获取到以后将获取到的新值传入此进度，直到完成"}]
	// ApiFox软件所需要的参数描述格式:（此软件需要的参数为多行形式，请手动去除最前面的//和空格，再行复制）
	// "key","string","true","","","进度下标"
	// "current","integer","false","","","当前进度 每次获取到以后将获取到的新值传入此进度，直到完成"
	// 其他软件所需要的KV键值对描述:
	// {"key":"进度下标","current":"当前进度 每次获取到以后将获取到的新值传入此进度，直到完成"}
	// 本命令执行参数【留做备份，以便后期使用/修改】
	// key string 进度下标 v=required current int 当前进度 每次获取到以后将获取到的新值传入此进度，直到完成 x.ginplus
	// 参数效验部分
	if param.Key == "" {
		return c.Errorf("进度下标(key) 不能为空")
	}

	for {
		p, err := progress.Get(param.Key)
		if err != nil {
			return c.Errorf("该进度已完成/不存在")
		}
		if p.Current != param.Current {
			return c.SuccessAny(p)
		}
		time.Sleep(time.Millisecond * 20)
	}
}
